{"componentChunkName":"component---src-templates-blog-post-js","path":"/Today I Learned/wrap_observably/","result":{"data":{"site":{"siteMetadata":{"title":"JULog","author":"[Ju Chan Hwang]","siteUrl":"https://julog.netlify.app","comment":{"disqusShortName":"","utterances":"JuChanHwang/gatsby-starter-bee"},"sponsor":{"buyMeACoffeeId":"jbee"}}},"markdownRemark":{"id":"acd6ef72-c15d-5fb4-b1b0-bd3bd34e72d5","excerpt":"ISSUE 카카오 맵 sdk 사용 카카오 맵에서 네이버 맵, 구글 맵으로 바로 바꿀 수 있도록 추상화를 하기 카카오 맵메소드 추상화 서비스로 파일 분리 옵저버블한 상태로 변경 추상화하기 전 로직 main.ts 추상화 후 로직 main.ts 서비스를 사용하는 쪽에서는 서비스 내부로직에서 무엇을 하는지 모름 내부 로직이 어떻게 생겼는지는 모르지만 필요한 파라미터만 넘겨주면 됨 service.ts 서비스 내부 로직","html":"<h2 id=\"issue\" style=\"position:relative;\"><a href=\"#issue\" aria-label=\"issue permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ISSUE</h2>\n<ul>\n<li>카카오 맵 sdk 사용</li>\n<li>\n<p>카카오 맵에서 네이버 맵, 구글 맵으로 바로 바꿀 수 있도록 추상화를 하기</p>\n<ul>\n<li>카카오 맵메소드 추상화</li>\n<li>서비스로 파일 분리</li>\n<li>옵저버블한 상태로 변경</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"추상화하기-전-로직\" style=\"position:relative;\"><a href=\"#%EC%B6%94%EC%83%81%ED%99%94%ED%95%98%EA%B8%B0-%EC%A0%84-%EB%A1%9C%EC%A7%81\" aria-label=\"추상화하기 전 로직 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>추상화하기 전 로직</h3>\n<blockquote>\n<p>main.ts</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\">navigator<span class=\"token punctuation\">.</span>geolocation<span class=\"token punctuation\">.</span><span class=\"token function\">getCurrentPosition</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> geocoder <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">kakao</span><span class=\"token punctuation\">.</span>maps<span class=\"token punctuation\">.</span>services<span class=\"token punctuation\">.</span><span class=\"token function\">Geocoder</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    geocoder<span class=\"token punctuation\">.</span><span class=\"token function\">coord2RegionCode</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>coords<span class=\"token punctuation\">.</span>longitude<span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">.</span>coords<span class=\"token punctuation\">.</span>latitude<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>coordRes<span class=\"token punctuation\">,</span> status<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>status <span class=\"token operator\">===</span> kakao<span class=\"token punctuation\">.</span>maps<span class=\"token punctuation\">.</span>services<span class=\"token punctuation\">.</span>Status<span class=\"token punctuation\">.</span><span class=\"token constant\">OK</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>api<span class=\"token punctuation\">.</span><span class=\"token function\">getDistrictFromCode</span><span class=\"token punctuation\">(</span>coordRes<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>code<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">pipe</span><span class=\"token punctuation\">(</span>\n          <span class=\"token function\">tap</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span> city <span class=\"token operator\">=</span> <span class=\"token string\">''</span><span class=\"token punctuation\">,</span> district <span class=\"token operator\">=</span> <span class=\"token string\">''</span><span class=\"token punctuation\">,</span> town <span class=\"token operator\">=</span> <span class=\"token string\">''</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>formGroup<span class=\"token punctuation\">.</span><span class=\"token function\">patchValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n              city<span class=\"token punctuation\">,</span> district<span class=\"token punctuation\">,</span> town<span class=\"token punctuation\">,</span>\n              position<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span> result<span class=\"token punctuation\">.</span>coords<span class=\"token punctuation\">.</span>latitude<span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">.</span>coords<span class=\"token punctuation\">.</span>longitude <span class=\"token punctuation\">]</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">subscribe</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span>status<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"추상화-후-로직\" style=\"position:relative;\"><a href=\"#%EC%B6%94%EC%83%81%ED%99%94-%ED%9B%84-%EB%A1%9C%EC%A7%81\" aria-label=\"추상화 후 로직 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>추상화 후 로직</h3>\n<blockquote>\n<p>main.ts</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>geolocation<span class=\"token punctuation\">.</span><span class=\"token function\">getCurrentPosition</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">pipe</span><span class=\"token punctuation\">(</span>\n\t\t<span class=\"token function\">mergeMap</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>geolocation<span class=\"token punctuation\">.</span><span class=\"token function\">coord2RegionCode</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>longitude<span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">.</span>latitude<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">pipe</span><span class=\"token punctuation\">(</span>\n        <span class=\"token function\">mergeMap</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>regionCode<span class=\"token operator\">:</span> <span class=\"token builtin\">string</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>api<span class=\"token punctuation\">.</span><span class=\"token function\">getDistrictFromCode</span><span class=\"token punctuation\">(</span>regionCode<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">pipe</span><span class=\"token punctuation\">(</span>\n            <span class=\"token function\">tap</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span> city <span class=\"token operator\">=</span> <span class=\"token string\">''</span><span class=\"token punctuation\">,</span> district <span class=\"token operator\">=</span> <span class=\"token string\">''</span><span class=\"token punctuation\">,</span> town <span class=\"token operator\">=</span> <span class=\"token string\">''</span> <span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n              <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>formGroup<span class=\"token punctuation\">.</span><span class=\"token function\">patchValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n                city<span class=\"token punctuation\">,</span> district<span class=\"token punctuation\">,</span> town<span class=\"token punctuation\">,</span>\n                position<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span> result<span class=\"token punctuation\">.</span>latitude<span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">.</span>longitude <span class=\"token punctuation\">]</span>\n              <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n          <span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n      <span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">subscribe</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<ul>\n<li>서비스를 사용하는 쪽에서는 서비스 내부로직에서 무엇을 하는지 모름</li>\n<li>내부 로직이 어떻게 생겼는지는 모르지만 필요한 파라미터만 넘겨주면 됨</li>\n</ul>\n<blockquote>\n<p>service.ts</p>\n</blockquote>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token function\">coord2RegionCode</span><span class=\"token punctuation\">(</span>longitude<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">,</span> latitude<span class=\"token operator\">:</span> <span class=\"token builtin\">number</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Observable</span><span class=\"token punctuation\">(</span>observer <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      kakao<span class=\"token punctuation\">.</span>maps<span class=\"token punctuation\">.</span><span class=\"token function\">load</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> geocoder <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">kakao</span><span class=\"token punctuation\">.</span>maps<span class=\"token punctuation\">.</span>services<span class=\"token punctuation\">.</span><span class=\"token function\">Geocoder</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        geocoder<span class=\"token punctuation\">.</span><span class=\"token function\">coord2RegionCode</span><span class=\"token punctuation\">(</span>longitude<span class=\"token punctuation\">,</span> latitude<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>coordRes<span class=\"token punctuation\">,</span> status<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>status <span class=\"token operator\">===</span> kakao<span class=\"token punctuation\">.</span>maps<span class=\"token punctuation\">.</span>services<span class=\"token punctuation\">.</span>Status<span class=\"token punctuation\">.</span><span class=\"token constant\">OK</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            observer<span class=\"token punctuation\">.</span><span class=\"token function\">next</span><span class=\"token punctuation\">(</span>coordRes<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>code<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            observer<span class=\"token punctuation\">.</span><span class=\"token function\">complete</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n            observer<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span>status<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<ul>\n<li>서비스 내부 로직</li>\n</ul>","frontmatter":{"title":"Wrap Observably","date":"July 08, 2020"}}},"pageContext":{"slug":"/Today I Learned/wrap_observably/","previous":{"fields":{"slug":"/Today I Learned/bottom_navigation_transition/"},"frontmatter":{"title":"Bottom Navigation Scrolling","category":"Today I Learned","draft":false}},"next":{"fields":{"slug":"/TypeScript/@types_typeRoots_and_types/"},"frontmatter":{"title":"@types, typeRoots and types","category":"TypeScript","draft":false}}}},"staticQueryHashes":["3128451518","96099027"]}